// 快速测试Redis Toolkit功能

import { RedisToolkit } from '../src';

async function quickTest() {
  console.log('🚀 开始Redis Toolkit快速测试...\n');

  // 创建Redis Toolkit实例
  const redis = new RedisToolkit({
    host: 'localhost',
    port: 6379,
    autoSerialize: true,
  });

  try {
    // 连接Redis
    console.log('📡 连接Redis...');
    await redis.connect();
    console.log('✅ Redis连接成功\n');

    // 测试缓存功能
    console.log('🗄️ 测试缓存功能...');
    await redis.cache.set('test-key', { message: 'Hello Redis Toolkit!' }, { ttl: 60 });
    const cached = await redis.cache.get('test-key');
    console.log('缓存结果:', cached);
    console.log('✅ 缓存功能正常\n');

    // 测试计数器功能
    console.log('🔢 测试计数器功能...');
    await redis.counter.increment('test-counter', 5);
    const count = await redis.counter.get('test-counter');
    console.log('计数器值:', count);
    console.log('✅ 计数器功能正常\n');

    // 测试集合功能
    console.log('📦 测试集合功能...');
    await redis.set.add('test-set', 'item1', 'item2', 'item3');
    const setSize = await redis.set.size('test-set');
    console.log('集合大小:', setSize);
    console.log('✅ 集合功能正常\n');

    // 测试排行榜功能
    console.log('🏆 测试排行榜功能...');
    await redis.leaderboard.updateScore('test-leaderboard', 'player1', 100);
    await redis.leaderboard.updateScore('test-leaderboard', 'player2', 200);
    const topPlayers = await redis.leaderboard.getTopN('test-leaderboard', 2);
    console.log('排行榜:', topPlayers);
    console.log('✅ 排行榜功能正常\n');

    // 测试限流功能
    console.log('⏱️ 测试限流功能...');
    const rateLimitResult = await redis.rateLimit.checkFixedWindow('test-limit', 5, 60);
    console.log('限流结果:', rateLimitResult);
    console.log('✅ 限流功能正常\n');

    // 测试分布式锁功能
    console.log('🔒 测试分布式锁功能...');
    const lockToken = await redis.lock.acquire('test-resource', { ttl: 30 });
    console.log('获取锁:', lockToken ? '成功' : '失败');
    if (lockToken) {
      const released = await redis.lock.release('test-resource', lockToken);
      console.log('释放锁:', released ? '成功' : '失败');
    }
    console.log('✅ 分布式锁功能正常\n');

    // 测试队列功能
    console.log('📋 测试队列功能...');
    const jobId = await redis.queue.addJob('test-queue', {
      type: 'test-job',
      payload: { message: 'Hello Queue!' },
    });
    console.log('添加作业:', jobId);
    
    const job = await redis.queue.getJob('test-queue');
    console.log('获取作业:', job?.type);
    
    if (job) {
      await redis.queue.completeJob(job.id, { success: true });
      console.log('完成作业');
    }
    console.log('✅ 队列功能正常\n');

    // 健康检查
    console.log('🏥 健康检查...');
    const health = await redis.healthCheck();
    console.log('健康状态:', health.status);
    console.log('✅ 健康检查正常\n');

    // 清理测试数据
    console.log('🧹 清理测试数据...');
    await redis.cache.del('test-key');
    await redis.counter.reset('test-counter');
    await redis.set.clear('test-set');
    await redis.leaderboard.clear('test-leaderboard');
    await redis.rateLimit.reset('test-limit');
    await redis.queue.clear('test-queue');
    console.log('✅ 清理完成\n');

    console.log('🎉 所有测试通过！Redis Toolkit工作正常！');

  } catch (error) {
    console.error('❌ 测试失败:', error);
  } finally {
    // 断开连接
    await redis.disconnect();
    console.log('📡 Redis连接已断开');
  }
}

// 运行测试
if (require.main === module) {
  quickTest().catch(console.error);
}

export { quickTest };
